package dominio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import persistencia.PersistentObject;
import dto.ItemOrdenCompraTO;
import dto.OrdenCompraTO;

@Entity
@Table(name = "OrdenCompra")
public class OrdenCompra extends PersistentObject {
	private static final long serialVersionUID = 1L;

	@Column(name = "fecha", nullable = false, columnDefinition = "datetime")
	private Date fecha;

	@OneToOne
	@JoinColumn(name = "idOrdenPedido")
	private OrdenPedido ordenPedido;

	@OneToOne
	@JoinColumn(name = "idProveedor")
	private Proveedor proveedor;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "idOrden")
	private List<ItemOrdenCompra> items;

	public OrdenCompra() {
		items = new ArrayList<ItemOrdenCompra>();
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public OrdenPedido getOrdenPedido() {
		return ordenPedido;
	}

	public void setOrdenPedido(OrdenPedido ordenPedido) {
		this.ordenPedido = ordenPedido;
	}

	public Proveedor getProveedor() {
		return proveedor;
	}

	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}

	public List<ItemOrdenCompra> getItems() {
		return items;
	}

	public void agregarItem(ItemOrdenCompra item) {
		items.add(item);
	}

	public OrdenCompraTO getDTO() {
		OrdenCompraTO dto = new OrdenCompraTO();
		dto.setId(id);
		dto.setFecha(fecha);
		if (ordenPedido != null)
			dto.setOrdenPedido(ordenPedido.getDTO());
		if (proveedor != null)
			dto.setProveedor(proveedor.getDTO());
		for (ItemOrdenCompra i : items)
			dto.agregarItem(i.getDTO());
		return dto;
	}

	public static OrdenCompra fromDTO(OrdenCompraTO dto) {
		if (dto == null)
			return null;
		OrdenCompra o = new OrdenCompra();
		o.setId(dto.getId());
		o.setFecha(dto.getFecha());
		o.setOrdenPedido(OrdenPedido.fromDTO(dto.getOrdenPedido()));
		o.setProveedor(Proveedor.fromDTO(dto.getProveedor()));
		for (ItemOrdenCompraTO i : dto.getItems())
			o.agregarItem(ItemOrdenCompra.fromDTO(i));
		return o;
	}
}